package org.rency.crawler.fetch.repository;

import java.util.List;
import org.rency.common.utils.enums.YesNoEnum;
import org.rency.crawler.common.enums.FirLevelKind;
import org.rency.crawler.common.enums.SecLevelKind;
import org.rency.crawler.domain.vo.MetaResourceDomain;

/**
 * 描述: ${TODO}<br>
 * 最近修改时间:2017/11/22 10:19<br>
 *
 * @author CaiyuRen
 * @version V1.0
 * @since 2017/11/22 10:19
 */
public interface MetaResourceRepository {

  public void refreshAll();

  public MetaResourceDomain load(String id);

  public MetaResourceDomain find(SecLevelKind secLevelKind);

  public MetaResourceDomain find(FirLevelKind firLevelKind, SecLevelKind secLevelKind);

  public List<MetaResourceDomain> find(FirLevelKind firLevelKind);

  public boolean save(MetaResourceDomain domain);

  public boolean updateEnable(String id, YesNoEnum newEnable, YesNoEnum oldEnable);

  /**
   * 获取抓取间隔时间
   * @return
   */
  public long getFetchIntervalTime();

  /**
   * 获取抓取重试次数
   * @return
   */
  public int getFetchRetryTimes();

  /**
   * 获取Robots协议开关
   * @return
   */
  public boolean getRobotsSwitch();

  /**
   * 获取Robots协议超时时间
   * @return
   */
  public long getRobotsPolicyExpireTime();

  /**
   * 获取缓存扩展失效时间
   * @return
   */
  public long getFetchExtExpireTime();

  /**
   * 获取抓取深度
   * @return
   */
  public int getFetchDepth();

  /**
   * 获取默认抓取权重
   * @return
   */
  public double getFetchWeight();

  /**
   * 获取已抓取队列超时时间
   * @return
   */
  public long getFetchedQueueExpireTime();

  /**
   * 获取域名超时时间
   * @return
   */
  public long getHostExpireTime();

  /**
   * 获取网络连接超时时间
   * @return
   */
  public int getHttpConnectTimeout();

  /**
   * 获取网络连接Socket超时时间
   * @return
   */
  public int getHttpConnectSocketTimeout();

  /**
   * 获取HTTP连接池最大数量
   * @return
   */
  public int getHttpConnectMaxTotal();

  /**
   * 获取HTTP重试次数
   * @return
   */
  public int getHttpRetryTimes();

  /**
   * 是否允许HTTP连接跳转
   * @return
   */
  public boolean getHttpAllowRedirect();

  /**
   * 获取HTTP代理开关
   * @return
   */
  public boolean getHttpProxySwitch();

  /**
   * 获取浏览器Agent代理
   * @return
   */
  public List<String> getHttpBrowserAgents();

  /**
   * 是否生成快照
   * @return
   */
  public boolean generateSnapshot();

  /**
   * 是否抓取图片
   * @return
   */
  public boolean fetchImgSwitch();

  /**
   * 是否抓取脚本
   * @return
   */
  public boolean fetchScriptSwitch();

  /**
   * 是否抓取样式
   * @return
   */
  public boolean fetchStyleSwitch();

  /**
   * 是否只抓取同一网站
   * @return
   */
  public boolean fetchSameSite();

  /**
   * 获取需过滤URI前缀
   * @return
   */
  public List<String> getFetchExcludeUriPrefix();

  /**
   * 获取需过滤URI后缀
   * @return
   */
  public List<String> getFetchExcludeUriSuffix();

  /**
   * 获取请求文件响应内容类型
   * @return
   */
  public List<String> getHttpContentTypeWithFile();
}
